function Enum(definition) {
    this._enums = [];
    this._lookups = {};
    var attr;
    for(attr in definition) {
        var prop = definition[attr];
        this[attr] = prop;
        this.addEnum(prop);
    }
    return this;
}

Enum.prototype.getEnums = function() {
    return _enums;
}

Enum.prototype.forEach = function(callback){
    var length = this._enums.length;
    for (var i = 0; i < length; ++i){
        callback(this._enums[i]);
    }
}

Enum.prototype.addEnum = function(e) {
    this._enums.push(e);
}

Enum.prototype.name = function(name) {
    return this[name];
}

Enum.prototype.value = function(field, value) {
    var lookup = this._lookups[field];
    if(lookup) {
        return lookup[value];
    } else {
        this._lookups[field] = ( lookup = {});
        var k = this._enums.length - 1;
        for(; k >= 0; --k) {
            var m = this._enums[k];
            var j = m[field];
            lookup[j] = m;
            if(j == value) {
                return m;
            }
        }
    }
    return null;
}

var Messager = function() {
    return {
        // 操作行为
        'action': {
            'default': [[0, 0], [0, 0], [0, 0]],
            'add': [[1, 2], [1, 1], [0, 0]],
            'update': [[2, 2], [2, 1], [0, 0]],
            'delete': [[3, 2], [3, 1], [0, 0]],
            'pick': [[4, 0], [5, 3], [0, 0]],
            'disabled': [[3, 1], [0, 0], [0, 0]],
            'get': [[4, 2], [3, 1], [0, 0]]
        },
        // 提示类别
        'status': {
            'error': 0,
            'info': 1,
            'warning': 2
        },
        //         0     1      2      3      4        5
        'prefix': ['', '添加', '修改', '删除', '获取', '请先选择一条'],
        'suffix': ['', '成功！', '失败！', '记录！', '不可用！'],
        'title': {
            'error': '操作提示',
            'info': '操作提示',
            'warning': '操作提示'
        }
    }
}();

if (Object.freeze) {
    Object.freeze(Enum);
    Object.freeze(Messager);
}
(function($) {
    $.fn.clearForm = function() {
        return this.find(":input").each(function() {
            this.value = "";
        }).end();
    };

    //$.messager.alert 提示统一
    $.alert = function(action, status, msg, func) {
        status = status || 'info', title = Messager.title[status], action = action || 'default';
        // 提示消息
        matrix = Messager.action[action][Messager.status[status]];
        msg = Messager.prefix[matrix[0]].append(msg).append(Messager.suffix[matrix[1]]);

        func = $.isFunction(func) ? func : function(){
            isAlert = 'add'.equal(action) || 'update'.equal(action);
            if(isAlert && 'info'.equal(status) && parent.btnQuery) {
                parent.btnQuery();
                closeLayer();
            }
        };

        $.messager.alert(title, msg, status, func);
    };
  /*  window.wxc = window.wxc || {};
    $.messager.alert = function(action, popHtml,type, options) {
        // $.alert= function(popHtml, type, options) {
        var btnType = window.wxc.btnEnum;
        var eventType = window.wxc.eventEnum;
        var popType = {
            info: {
                title: "信息",
                icon: "0 0",//蓝色i
                btn: btnType.ok
            },
            success: {
                title: "成功",
                icon: "0 -48px",//绿色对勾
                btn: btnType.ok
            },
            error: {
                title: "错误",
                icon: "-48px -48px",//红色叉
                btn: btnType.ok
            },
            confirm: {
                title: "提示",
                icon: "-48px 0",//黄色问号
                btn: btnType.okcancel
            },
            warning: {
                title: "警告",
                icon: "0 -96px",//黄色叹号
                btn: btnType.okcancel
            },
            input: {
                title: "输入",
                icon: "",
                btn: btnType.ok
            },
            custom: {
                title: "",
                icon: "",
                btn: btnType.ok
            }
        };
        var itype = type ? type instanceof Object ? type : popType[type] || {} : {};//格式化输入的参数:弹窗类型
        var config = $.extend(true, {
            //属性
            title: "", //自定义的标题
            icon: "", //图标
            btn: btnType.ok, //按钮,默认单按钮
            //事件
            onOk: $.noop,//点击确定的按钮回调
            onCancel: $.noop,//点击取消的按钮回调
            onClose: $.noop//弹窗关闭的回调,返回触发事件
        }, itype, {onOk:options});

        var $txt = $("<p>").html(popHtml);//弹窗文本dom
        var $tt = $("<span>").addClass("tt").text(config.title);//标题
        var icon = config.icon;
        var $icon = icon ? $("<div>").addClass("bigIcon").css("backgroundPosition",icon) : "";
        var btn = config.btn;//按钮组生成参数

        var popId = creatPopId();//弹窗索引;
        var $box = "";
        var $layer ="";
        var $popBox = "";
        var $ttBox ="";
        var $txtBox = "";
        var $btnArea = "";
        var $ok = "";
        var $cancel = "";
        var $input = "";
        var $clsBtn = "";
        if(type == window.wxc.typeEnum.error||type == window.wxc.typeEnum.input||type == window.wxc.typeEnum.custom){

            $box = $("<div>").addClass("xcConfirm");//弹窗插件容器
            $layer = $("<div>").addClass("xc_layer");//遮罩层
            $popBox = $("<div>").addClass("popBox");//弹窗盒子
            $ttBox = $("<div>").addClass("ttBox");//弹窗顶部区域
            $txtBox = $("<div>").addClass("txtBox");//弹窗内容主体区
            $btnArea = $("<div>").addClass("btnArea");//按钮区域
            $ok = $("<a>").addClass("sgBtn").addClass("ok").text("确定");//确定按钮
            $cancel = $("<a>").addClass("sgBtn").addClass("cancel").text("取消");//取消按钮
            $input = $("<input>").addClass("inputBox");//输入框
            $clsBtn = $("<a>").addClass("clsBtn");//关闭按钮
        }else{

            $box = $("<div>").addClass("xcConfirm2");//弹窗插件容器
            $layer = $("<div>").addClass("xc_layer2");//遮罩层
            $popBox = $("<div>").addClass("popBox2");//弹窗盒子
            $ttBox = $("<div>").addClass("ttBox2");//弹窗顶部区域
            $txtBox = $("<div>").addClass("txtBox2");//弹窗内容主体区
            $btnArea = $("<div>").addClass("btnArea2");//按钮区域
            $ok = $("<a>").addClass("sgBtn2").addClass("ok").text("确定");//确定按钮
            $cancel = $("<a>").addClass("sgBtn2").addClass("cancel").text("取消");//取消按钮
            $input = $("<input>").addClass("inputBox2");//输入框
            $clsBtn = $("<a>").addClass("clsBtn2");//关闭按钮
        }



        //建立按钮映射关系
        var btns = {
            ok: $ok,
            cancel: $cancel
        };

        init();

        function init(){
            //处理特殊类型input
            if(popType["input"] === itype){
                $txt.append($input);
            }

            creatDom();
            bind();
        }

        function creatDom(){
            $popBox.append(
                $ttBox.append(
                    $clsBtn
                ).append(
                    $tt
                )
            ).append(
                $txtBox.append($icon).append($txt)
            ).append(
                $btnArea.append(creatBtnGroup(btn))
            );
            $box.attr("id", popId).append($layer).append($popBox);
            $("body").append($box);
        }

        function bind(){
            //点击确认按钮
            $ok.click(doOk);

            //回车键触发确认按钮事件
            $(window).bind("keydown", function(e){
                if(e.keyCode == 13) {
                    if($("#" + popId).length == 1){
                        doOk();
                    }
                }
            });

            //点击取消按钮
            $cancel.click(doCancel);

            //点击关闭按钮
            $clsBtn.click(doClose);
        }

        //确认按钮事件
        function doOk(){
            var $o = $(this);
            var v = $.trim($input.val());
            if ($input.is(":visible"))
                config.onOk(v);
            else
                config.onOk();
            $("#" + popId).remove();
            config.onClose(eventType.ok);
        }

        //取消按钮事件
        function doCancel(){
            var $o = $(this);
            config.onCancel();
            $("#" + popId).remove();
            config.onClose(eventType.cancel);
        }

        //关闭按钮事件
        function doClose(){
            $("#" + popId).remove();
            config.onClose(eventType.close);
            $(window).unbind("keydown");
        }

        //生成按钮组
        function creatBtnGroup(tp){
            var $bgp = $("<div>").addClass("btnGroup");
            $.each(btns, function(i, n){
                if( btnType[i] == (tp & btnType[i]) ){
                    $bgp.append(n);
                }
            });
            return $bgp;
        }

        //重生popId,防止id重复
        function creatPopId(){
            var i = "pop_" + (new Date()).getTime()+parseInt(Math.random()*100000);//弹窗索引
            if($("#" + i).length > 0){
                return creatPopId();
            }else{
                return i;
            }
        }
    };

    //按钮类型
    window.wxc.btnEnum = {
        ok: parseInt("0001",2), //确定按钮
        cancel: parseInt("0010",2), //取消按钮
        okcancel: parseInt("0011",2) //确定&&取消
    };

    //触发事件类型
    window.wxc.eventEnum = {
        ok: 1,
        cancel: 2,
        close: 3
    };

    //弹窗类型
    window.wxc.typeEnum = {
        info: "info",
        success: "success",
        error:"error",
        confirm: "confirm",
        warning: "warning",
        input: "input",
        custom: "custom"
    };

    $.alert = function(action, type,popHtml,options) {
        // $.alert= function(popHtml, type, options) {
        var btnType = window.wxc.btnEnum;
        var eventType = window.wxc.eventEnum;
        var popType = {
            info: {
                title: "信息",
                icon: "0 0",//蓝色i
                btn: btnType.ok
            },
            success: {
                title: "成功",
                icon: "0 -48px",//绿色对勾
                btn: btnType.ok
            },
            error: {
                title: "错误",
                icon: "-48px -48px",//红色叉
                btn: btnType.ok
            },
            confirm: {
                title: "提示",
                icon: "-48px 0",//黄色问号
                btn: btnType.okcancel
            },
            warning: {
                title: "警告",
                icon: "0 -96px",//黄色叹号
                btn: btnType.okcancel
            },
            input: {
                title: "输入",
                icon: "",
                btn: btnType.ok
            },
            custom: {
                title: "",
                icon: "",
                btn: btnType.ok
            }
        };
        var itype = type ? type instanceof Object ? type : popType[type] || {} : {};//格式化输入的参数:弹窗类型
        var config = $.extend(true, {
            //属性
            title: "", //自定义的标题
            icon: "", //图标
            btn: btnType.ok, //按钮,默认单按钮
            //事件
            onOk: $.noop,//点击确定的按钮回调
            onCancel: $.noop,//点击取消的按钮回调
            onClose: $.noop//弹窗关闭的回调,返回触发事件
        }, itype, {onOk:options});

        var $txt = $("<p>").html(popHtml);//弹窗文本dom
        var $tt = $("<span>").addClass("tt").text(config.title);//标题
        var icon = config.icon;
        var $icon = icon ? $("<div>").addClass("bigIcon").css("backgroundPosition",icon) : "";
        var btn = config.btn;//按钮组生成参数

        var popId = creatPopId();//弹窗索引;
        var $box = "";
        var $layer ="";
        var $popBox = "";
        var $ttBox ="";
        var $txtBox = "";
        var $btnArea = "";
        var $ok = "";
        var $cancel = "";
        var $input = "";
        var $clsBtn = "";
        if(type == window.wxc.typeEnum.error||type == window.wxc.typeEnum.input||type == window.wxc.typeEnum.custom){

            $box = $("<div>").addClass("xcConfirm");//弹窗插件容器
            $layer = $("<div>").addClass("xc_layer");//遮罩层
            $popBox = $("<div>").addClass("popBox");//弹窗盒子
            $ttBox = $("<div>").addClass("ttBox");//弹窗顶部区域
            $txtBox = $("<div>").addClass("txtBox");//弹窗内容主体区
            $btnArea = $("<div>").addClass("btnArea");//按钮区域
            $ok = $("<a>").addClass("sgBtn").addClass("ok").text("确定");//确定按钮
            $cancel = $("<a>").addClass("sgBtn").addClass("cancel").text("取消");//取消按钮
            $input = $("<input>").addClass("inputBox");//输入框
            $clsBtn = $("<a>").addClass("clsBtn");//关闭按钮
        }else{

            $box = $("<div>").addClass("xcConfirm2");//弹窗插件容器
            $layer = $("<div>").addClass("xc_layer2");//遮罩层
            $popBox = $("<div>").addClass("popBox2");//弹窗盒子
            $ttBox = $("<div>").addClass("ttBox2");//弹窗顶部区域
            $txtBox = $("<div>").addClass("txtBox2");//弹窗内容主体区
            $btnArea = $("<div>").addClass("btnArea2");//按钮区域
            $ok = $("<a>").addClass("sgBtn2").addClass("ok").text("确定");//确定按钮
            $cancel = $("<a>").addClass("sgBtn2").addClass("cancel").text("取消");//取消按钮
            $input = $("<input>").addClass("inputBox2");//输入框
            $clsBtn = $("<a>").addClass("clsBtn2");//关闭按钮
        }

        //建立按钮映射关系
        var btns = {
            ok: $ok,
            cancel: $cancel
        };

        init();

        function init(){
            //处理特殊类型input
            if(popType["input"] === itype){
                $txt.append($input);
            }

            creatDom();
            bind();
        }

        function creatDom(){
            $popBox.append(
                $ttBox.append(
                    $clsBtn
                ).append(
                    $tt
                )
            ).append(
                $txtBox.append($icon).append($txt)
            ).append(
                $btnArea.append(creatBtnGroup(btn))
            );
            $box.attr("id", popId).append($layer).append($popBox);
            $("body").append($box);
        }

        function bind(){
            //点击确认按钮
            $ok.click(doOk);

            //回车键触发确认按钮事件
            $(window).bind("keydown", function(e){
                if(e.keyCode == 13) {
                    if($("#" + popId).length == 1){
                        doOk();
                    }
                }
            });

            //点击取消按钮
            $cancel.click(doCancel);

            //点击关闭按钮
            $clsBtn.click(doClose);
        }

        //确认按钮事件
        function doOk(){
            var $o = $(this);
            var v = $.trim($input.val());
            if ($input.is(":visible"))
                config.onOk(v);
            else
                config.onOk();
            $("#" + popId).remove();
            config.onClose(eventType.ok);
        }

        //取消按钮事件
        function doCancel(){
            var $o = $(this);
            config.onCancel();
            $("#" + popId).remove();
            config.onClose(eventType.cancel);
        }

        //关闭按钮事件
        function doClose(){
            $("#" + popId).remove();
            config.onClose(eventType.close);
            $(window).unbind("keydown");
        }

        //生成按钮组
        function creatBtnGroup(tp){
            var $bgp = $("<div>").addClass("btnGroup");
            $.each(btns, function(i, n){
                if( btnType[i] == (tp & btnType[i]) ){
                    $bgp.append(n);
                }
            });
            return $bgp;
        }

        //重生popId,防止id重复
        function creatPopId(){
            var i = "pop_" + (new Date()).getTime()+parseInt(Math.random()*100000);//弹窗索引
            if($("#" + i).length > 0){
                return creatPopId();
            }else{
                return i;
            }
        }
    };*/
})(jQuery);
